专利摘要:
一種常數資料存取系統,包含一編譯器、一指令集模組及一計算機處理器。該編譯器具有一常數集區處理器(Constant Pool Handler),該指令集模組具有一常數集區基底暫存器(Base Register)管理指令集單元及一常數集區存取指令集單元,該計算機處理器具有一常數集區基底暫存器,其中該常數集區基底暫存器用以儲存一或複數個子程序(Sub-routine)之常數集區位址之值,該或該些子程序具有一或複數個被存取之常數,其中該常數集區處理器用以管理及存取該或該些子程序之該或該些被存取之常數。
公开号:TW201324340A
申请号:TW101142556
申请日:2012-11-15
公开日:2013-06-16
发明作者:Wei-Hao Chiao;Haw-Luen Tsai;Chen-Wei Chang;Hong-Men Su
申请人:Andes Technology Corp;
IPC主号:G06F9-00
专利说明:
常數資料存取系統及其方法
本發明係關於一種常數存取系統及其方法。
圖1為Microprocessor without Interlocked Pipeline Stages 32(MIP32)為一常見32位元習知常數存取方法。其藉由二個32位元之指令,分別為取出上半立即值(Load Upper Immediate(LUI))及或立即值(Or Immediate(ORI))。如圖1所示,LUI提供攜帶上半32位元常數之內容而ORI提供攜帶下半32位元常數之內容。
另一相關技術係為程式計數器相關資料存取(Program-Counter-Relative Data Access)。X86-64、ARM及DEC VAX都支源此技術。使用此技術之編譯器將常數置於子程式之前或之後,並使用該程式計數器相關資料存取指令以存取該或該些常數。
圖2所示為一示例以解說如何使用程式計數器相關資料存取。如圖2所示,程式碼11係為以C語言編寫之一原始碼,該原始碼定義一簡單子程式,該簡單子程式用以取得一全域(global)變數(global_var)以增加其值並將該增加後之值回存於變數(global_var)所在之記憶體中。
程式碼13係為一ARM架構之組合碼(Assembly Code),其係為藉由一編譯器編譯前述C語言編寫之程式碼後而產生之組合碼。
於該組合碼中,位址0x100之資料係為該全域(global)變數(global_var)且其初始值為0,而該全域(global)變數(global_var)之位址係為置於位址0x00c之一常數資料。
該全域(global)變數(global_var)之位址係可藉由位於位址0x000之程式計數器相關載入指令取得。因此,用以存取常數資料之程式碼大小(Code Size)為6位元組。
然而,當子程序之程式碼非常大時,該程式計數器相關載入指令所處之位址與該常數所處位址之距離亦會變長。若此情況發生時,該程式計數器相關載入指令之指令大小將變為4位元組。因此,存取該常數之程式碼大小將變為8位元組。
因此,本發明提供一種常數資料存取系統及其方法以解決上述問題。
本發明之一實施例係為一種常數資料存取系統,包含一編譯器、一指令集模組及一計算基處理器。該編譯器具有一常數集區處理器(Constant Pool Handler),該指令集模組具有一常數集區基底暫存器(Base Register)管理指令集單元及一常數集區存取指令集單元,該計算機處理器具有一常數集區基底暫存器。
其中該常數集區基底暫存器用以儲存一或複數個子程序(Sub-routine)之常數集區位址之值,該或該些子程序具有一或複數個被存取之常數,其中該常數集區處理器用以管理及存取該或該些子程序之該或該些被存取之常數。
本發明之一實施例之該常數集區基底暫存器係為一特定暫存器或該計算機處理器之複數個普通目的(General Purpose)暫存器之一。本發明之一實施例係為一計算機處理器,其支持一指令集模組,該計算機處理器包含一常數集區基礎暫存器,該常數集區基礎暫存器用以儲存一或複數個子程序之常數集區位址之值,該或該些子程序具有一或複數個被存取之常數,其中,該指令集模組具有一常數集區基底暫存器(Base Register)管理指令集單元及一常數集區存取指令集單元。
本發明之一實施例之該計算機處理器用以執行一編譯器編譯過之機械碼(Machine Code),其中該編譯器具有一常數集區處理器。
本發明之一實施例係為一種一或複數個子程序之常數資料存取方法,其步驟包含置放一或複數個常數於一常數集區中,判斷該常數集區基礎位址值,管理儲存於一常數集區基礎暫存器之值以及存取該或該些常數。其中,該存取該或該些常數之步驟係藉由涉及(Involving)該常數集區基礎暫存器之一或複數個指令以達成。其中,該管理儲存於該常數集區基礎暫存器之值之步驟包含設定(Set)、備份(Save)及回復(Restore)該常數集區基礎暫存器之該常數集區基礎位址值。
上文已經概略地敍述本揭露之技術特徵,俾使下文之本揭露詳細描述得以獲得較佳瞭解。構成本揭露之申請專利範圍標的之其它技術特徵將描述於下文。本揭露所屬技術領域中具有通常知識者應可瞭解,下文揭示之概念與特定實施例可作為基礎而相當輕易地予以修改或設計其它結構或製程而實現與本揭露相同之目的。本揭露所屬技術領域中具有通常知識者亦應可瞭解,這類等效的建構並無法脫離後附之申請專利範圍所提出之本揭露的精神和範圍。
本發明揭露一常數資料存取系統。圖3所示為本發明一實施例之示意圖,如圖3所示,該常數資料存取系統20包含一計算機處理器23、一編譯器21及一指令集模組25。該計算機處理器23具有一常數集區基底暫存器26,該編譯器21具有一常數集區處理器27,該指令集模組25具有一常數集區基底暫存器管理指令集單元28及一常數集區存取指令集單元29。
該常數集區基底暫存器26用以儲存儲存一或複數個子程序之常數集區位址之值,該或該些子程序具有一或複數個可被存取之常數。其中該常數集區基底暫存器26係為一特定暫存器或該計算機處理器之複數個普通目的(General Purpose)暫存器之一。
於該系統20中,該編譯器21之主要功能係為將一原始碼22編譯成一機械碼24,該機械碼24可被該計算機處理器23執行,另,該編譯器21係使用該指令集模組25以編譯該原始碼22。
於該編譯器21中,該常數集區處理器27用以管理及存取該或該些子程序之該或該些被存取之常數。
圖4所示為本發明一實施例之該常數集區處理器27之一或複數個子程序之常數資料存取流程圖。如圖4所示,該常數資料存取方法之步驟包含如下,於步驟S501中,一或複數個常數被置放於一常數集區中,於步驟S503中,一常數集區基礎位址之值將被判斷。
於步驟S505中,於一常數集區基礎暫存器中管理該常數集區基礎位址值,其中於該常數集區基礎暫存器中管理該常數集區基礎位址值之步驟包含設定(Set)、備份(Save)及回復(Restore)該常數集區基礎暫存器之該常數集區基礎位址值。於步驟S507中,藉由涉及(Involving)該常數集區基礎暫存器之一或複數個指令以存取該或該些常數,該或該些複數個指令係來自該常數集區存取指令集單元29。於步驟S501中,一或複數個常數被置放於一常數集區中。
如圖5所示,圖5所示為本發明一實施例之該常數集區位置示意圖。該常數集區31係位於一子程序33之後或之前。於步驟S503中,一常數集區基礎位址之值將被判斷。
如圖6所示,圖6所示為本發明一實施例之該常數集區基礎位址之位置示意圖。該常數集區基礎位址43係位於一常數集區41之一起始位址或該起始位址之前、該常數集區41之該起始位址及該常數集區之一結束位址之間、該結束位址或該結束位址之後。
該常數集區基礎暫存器26用以儲存一或複數個子程序(Sub-routine)之常數集區位址之值,該或該些子程序具有一或複數個被存取之常數,當該程序流程進入一新的子程序且該新的子程序係在子程序呼叫(Subroutine Call)及子程序返回(Subroutine Return)時,該常數集區基礎暫存器係使用該常數集區基礎暫存器管理指令集單元28所管理,如步驟S505所示。該常數集區基礎暫存器之管理方法之步驟包含:
1.在呼叫程序(Caller)或一被呼叫程序(Callee)中使用推入-常數集區基礎暫存器(Push-CPBR)指令在被呼叫程序之常數集區基礎暫存器被設定之前備份該呼叫程序之常數集區基礎暫存器。
2.於該被呼叫程序之第一次常數存取之前設定該被呼叫程序之常數集區基礎暫存器。
前述步驟2有兩種方式可以達成:
甲、在該呼叫程序進行子程序呼叫時使用呼叫-並-設定常數集區基礎暫存器(Call-and-Set-CPBR)指令。
乙、在該被呼叫程序中使用設定-常數集區基礎暫存器(Set-CPBR)指令。
3.於該被呼叫程序之最後之常數存取之後且於該呼叫程序之下一常數存取之前還原該呼叫程序之常數集區基礎暫存器。此步驟有兩種方式可以達成:
甲、在該被呼叫程序返回時使用取出-常數集區基礎暫存器-且-返回(Pop-CPBR-and-return)指令。
乙、在該呼叫程序或該被呼叫程序中使用取出-常數集區基礎暫存器(Pop-CPBR)指令。
另,為了更進一步簡化程式碼,步驟1之推入-常數集區基礎暫存器(Push-CPBR)指令與步驟2之方法甲之呼叫-並-設定常數集區基礎暫存器(Call-and-Set-CPBR)指令可合併成為一單一指令推入-常數集區基礎暫存器-並-呼叫-並-設定常數集區基礎暫存器(Push-CPBR-and-Call-and-Set-CPBR)。
此外,步驟1之推入-常數集區基礎暫存器(Push-CPBR)指令與步驟2之方法乙之設定-常數集區基礎暫存器(Set-CPBR)指令可合併成為一單一指令推入-常數集區基礎暫存器-並-設定常數集區基礎暫存器(Push-CPBR-and-Set-CPBR)。
下列示例為常數集區基礎暫存器管理者於呼叫程序之子程序及被呼叫程序之子程序之組合。
圖7所示為本發明一實施例設定、備份及回復子程序中常數集區基礎位址值之示意圖。如圖7所示,設定、備份及回復常數集區基礎位址值於呼叫程序之子程序中。
圖8所示為本發明另一實施例設定、備份及回復子程序中常數集區基礎位址值之示意圖。如圖8所示,設定及備份常數集區基礎位址值於呼叫程序之子程序中並回復常數集區基礎位址值於被呼叫程序之子程序中。
圖9所示為本發明再一實施例設定、備份及回復子程序中常數集區基礎位址值之示意圖。如圖9所示,設定及回復常數集區基礎位址值於呼叫程序之子程序中並備份常數集區基礎位址值於被呼叫程序之子程序中。
圖10所示為本發明再一實施例設定、備份及回復子程序中常數集區基礎位址值之示意圖。如圖10所示,備份常數集區基礎位址值於呼叫程序之子程序中並設定及回復常數集區基礎位址值於被呼叫程序之子程序中。
圖11所示為本發明再一實施例設定、備份及回復子程序中常數集區基礎位址值之示意圖。如圖11所示,回復常數集區基礎位址值於呼叫程序之子程序中並備份及設定常數集區基礎位址值於被呼叫程序之子程序中。
圖12所示為本發明再一實施例設定、備份及回復子程序中常數集區基礎位址值之示意圖。如圖12所示,回復、備份及設定常數集區基礎位址值於被呼叫程序之子程序中。
圖13所示為本發明再一實施例設定及備份子程序中常數集區基礎位址值之示意圖。如圖13所示,僅設定常數集區基礎位址值於呼叫程序之子程序中。
圖14所示為本發明再一實施例設定及備份子程序中常數集區基礎位址值之示意圖。如圖14所示,僅設定常數集區基礎位址值於被呼叫程序之子程序中。
本揭露之技術內容及技術特點已揭示如上,然而熟悉本項技術之人士仍可能基於本揭露之教示及揭示而作種種不背離本揭露精神之替換及修飾。因此,本揭露之保護範圍應不限於實施例所揭示者,而應包括各種不背離本揭露之替換及修飾,並為以下之申請專利範圍所涵蓋。
11‧‧‧程式碼
13‧‧‧程式碼
20‧‧‧常數資料存取系統
21‧‧‧編譯器
22‧‧‧原始碼
23‧‧‧計算機處理器
24‧‧‧機械碼
25‧‧‧指令集模組
26‧‧‧常數集區基底暫存器
27‧‧‧常數集區處理器
28‧‧‧常數集區基底暫存器管理指令集單元
29‧‧‧常數集區存取指令集單元
31‧‧‧常數集區
33‧‧‧子程序
41‧‧‧常數集區
43‧‧‧常數集區基礎位址
S501~S507‧‧‧步驟
圖1所示為藉由二個32位元指令所建構之具有32位元內容之習知常數存取方法之示意圖;圖2所示為一示例以解說如何使用程式計數器相關資料存取之示意圖;圖3所示為本發明一實施例之示意圖;圖4所示為本發明一實施例之該常數集區處理器之一或複數個子程序之常數資料存取流程圖;圖5所示為本發明一實施例之該常數集區位置示意圖;圖6所示為本發明一實施例之該常數集區基礎位址之位置示意圖;圖7所示為本發明一實施例設定、備份及回復子程序中常數集區基礎位址值之示意圖;圖8所示為本發明另一實施例設定、備份及回復子程序中常數集區基礎位址值之示意圖;圖9所示為本發明再一實施例設定、備份及回復子程序中常數集區基礎位址值之示意圖;圖10所示為本發明再一實施例設定、備份及回復子程序中常數集區基礎位址值之示意圖;圖11所示為本發明再一實施例設定、備份及回復子程序中常數集區基礎位址值之示意圖;圖12所示為本發明再一實施例設定、備份及回復子程序中常數集區基礎位址值之示意圖;圖13所示為本發明再一實施例設定及備份子程序中常數集區基礎位址值之示意圖;及圖14所示為本發明再一實施例設定及備份子程序中常數集區基礎位址值之示意圖。
20‧‧‧常數資料存取系統
21‧‧‧編譯器
22‧‧‧原始碼
23‧‧‧計算機處理器
24‧‧‧機械碼
25‧‧‧指令集模組
26‧‧‧常數集區基底暫存器
27‧‧‧常數集區處理器
28‧‧‧常數集區基底暫存器管理指令集單元
29‧‧‧常數集區存取指令集單元
权利要求:
Claims (9)
[1] 一種常數資料存取系統,包含:一編譯器,具有一常數集區處理器(Constant Pool Handler);一指令集模組,具有一常數集區基底暫存器(Constant Pool Base Register)管理指令集單元及一常數集區存取指令集單元;以及一計算機處理器,具有一常數集區基底暫存器;其中,該常數集區基底暫存器用以儲存一或複數個子程序(Sub-routine)之常數集區位址之值,該或該些子程序具有一或複數個被存取之常數;其中,該常數集區處理器用以管理及存取該或該些子程序之該或該些被存取之常數。
[2] 如請求項第1項所述之常數資料存取系統,其中該常數集區基底暫存器係為一特定暫存器或該計算機處理器之複數個普通目的(General Purpose)暫存器之一。
[3] 一計算機處理器,其支持一指令集模組,包含:一常數集區基礎暫存器,用以儲存一或複數個子程序之常數集區位址之值,該或該些子程序具有一或複數個被存取之常數;其中,該指令集模組具有一常數集區基底暫存器(Base Register)管理指令集單元及一常數集區存取指令集單元。
[4] 如請求項第3項所述之計算機處理器,其中該計算機處理器用以接收一編譯器編譯過之機械碼(Machine Code),其中該編譯器具有一常數集區處理器。
[5] 如請求項第3項所述之計算機處理器,其中該常數集區基礎暫存器係為一特定暫存器或該計算機處理器之複數個普通目的暫存器之一。
[6] 一種一或複數個子程序之常數資料存取方法,其步驟包含:置放一或複數個常數於一常數集區中;判斷該常數集區基礎位址值;管理該常數集區基礎位址值於一常數集區基礎暫存器;以及存取該或該些常數;其中,該存取該或該些常數之步驟係藉由涉及(Involving)該常數集區基礎暫存器之一或複數個指令以達成;以及其中,該管理該常數集區基礎位址值於一常數集區基礎暫存器之步驟包含設定(Set)、備份(Save)及回復(Restore)該常數集區基礎暫存器之該常數集區基礎位址值。
[7] 如請求項第6項所述之常數資料存取方法,其中該常數集區係位於一子程序之前或之後。
[8] 如請求項第6項所述之常數資料存取方法,其中該常數集區基礎位址係位於該常數集區之一起始位址、該起始位址之前、該常數集區之該起始位址及該常數集區之一結束位址之間、位於該常數集區之該結束位址或該結束位址之後。
[9] 如請求項第7項所述之常數資料存取方法,其中該常數集區相鄰於該子程序。
类似技术:
公开号 | 公开日 | 专利标题
KR101872625B1|2018-08-02|동적 타입 어레이 객체들에 액세스할 시의 크기 의존적 타입
TWI338861B|2011-03-11|System and method for grouping execution threads
JP2010532530A|2010-10-07|メモリトランザクションのグループ化
US9424009B2|2016-08-23|Handling pointers in program code in a system that supports multiple address spaces
GB2484881A|2012-04-25|Transactional memory system with efficient cache support
TW201512856A|2015-04-01|在具有異質處理器之電腦平台中執行之方法和電腦平台
US8234489B2|2012-07-31|Set of system configuration registers having shadow register
US20130275720A1|2013-10-17|Zero cycle move
JP2010532530A5|2011-07-28|
JP2004013556A|2004-01-15|プロセッサ装置、コンパイル装置及びその方法
CN106294205B|2019-12-10|缓存数据处理方法及装置
JP2008305246A|2008-12-18|情報処理装置、キャッシュフラッシュ制御方法及び情報処理制御装置
TWI604381B|2017-11-01|常數資料存取系統及其方法
CN104965687A|2015-10-07|基于指令集生成的大数据处理方法及装置
US8612685B2|2013-12-17|Processor, information processing device and cache control method of processor
CN101847096A|2010-09-29|包含栈变量函数的优化方法
CN102117224B|2013-01-30|一种面向多核处理器的操作系统噪声控制方法
Gauthier et al.2009|Optimal stack frame placement and transfer for energy reduction targeting embedded processors with scratch-pad memories
JP2010529540A5|2011-07-07|
CN109376022A|2019-02-22|一种提升Halide语言在多核系统执行效率的线程模型实现方法
Qian et al.2014|Pacifier: Record and replay for relaxed-consistency multiprocessors with distributed directory protocol
Kim et al.2019|Static Function Prefetching for Efficient Code Management on Scratchpad Memory
CN110609705B|2021-05-11|一种提高mcu总线效率的方法、智能终端、存储介质及芯片
Lashgar et al.2018|TELEPORT: Hardware/software alternative to CUDA shared memory programming
CN105242978B|2019-01-08|多线程条件下cpu高速缓存行失效的处理方法及装置
同族专利:
公开号 | 公开日
CN103218302B|2016-08-03|
TWI604381B|2017-11-01|
US20130124836A1|2013-05-16|
CN103218302A|2013-07-24|
US8972705B2|2015-03-03|
引用文献:
公开号 | 申请日 | 公开日 | 申请人 | 专利标题
EP0755540B1|1994-04-13|2003-04-09|Ericsson Inc.|Efficient addressing of large memories|
US6314504B1|1999-03-09|2001-11-06|Ericsson, Inc.|Multi-mode memory addressing using variable-length|
US7209140B1|1999-12-06|2007-04-24|Nvidia Corporation|System, method and article of manufacture for a programmable vertex processing model with instruction set|
JP3786644B2|2001-04-23|2006-06-14|アトメル・コーポレイション|バイトコンパイルされたJava(R)コードを実行するためのマイクロプロセッサ|
DE10329680A1|2003-07-01|2005-02-10|Universität Stuttgart|Prozessorarchitektur für exakte Zeigeridentifizierung|
US7356811B2|2004-07-08|2008-04-08|International Business Machines Corporation|Method and apparatus for referencing a constant pool in a java virtual machine|
US8365156B2|2010-04-17|2013-01-29|Microsoft Corporation|Intermediate language support for change resilience|
法律状态:
优先权:
申请号 | 申请日 | 专利标题
US13/298,023|US8972705B2|2011-11-16|2011-11-16|Executing instructions for managing constant pool base register used for accessing constants during subroutine execution|
[返回顶部]